package com.atguigu.gmall.item.service.impl;

import com.alibaba.fastjson.JSON;
import com.atguigu.gmall.item.service.ItemService;
import com.atguigu.gmall.product.client.ProductFeignClient;
import com.atguigu.gmall.ListFeignClient;
import com.atguigu.gmall.product.model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@SuppressWarnings("all")
public class ItemServiceImpl implements ItemService {
    @Autowired
    private ProductFeignClient productFeignClient;
    @Autowired
    private ListFeignClient listFeignClient;

    /**
     * 查询详情信息,汇总详情页需要数据
     * @param skuId
     * @return
     *
     *
     *  查询商品信息,汇总详情页面需要数据
     *  1.根据SkuID查询商品SKU基本信息包含图片列表-返回sku商品对象  skuInfo
     *  2.根据三级分类ID查询所属分类信息 categoryView
     *  3.根据SkuID查询价格 price
     *  4.根据spuId查询商品海报列表 spuPosterList
     *  5.根据skuId查询平台属性列表 skuAttrList
     *  6.根据spuID+SkuId查询销售属性 选中当前商品销售属性 spuSaleAttrList
     *  7.根据spuID查询销售属性跟sku对照关系-选择销售属性组合,切换SKU valuesSkuJson
     */
    @Override
    public Map<String, Object>  getItemInfo(Long skuId) {
        Map<String, Object> mapResult = new HashMap<String, Object>();

        //1.根据SkuID查询商品SKU基本信息包含图片列表-返回sku商品对象  skuInfo
        SkuInfo skuInfo = productFeignClient.getSkuInfo(skuId);
        if(skuInfo != null){
            mapResult.put("skuInfo",skuInfo);
        }

        //2.根据三级分类ID查询所属分类信息 categoryView
        BaseCategoryView categoryView = productFeignClient.getCategoryView(skuInfo.getCategory3Id());
        if(categoryView != null){
            mapResult.put("categoryView",categoryView);
        }

        // 3.根据SkuID查询价格 price
        BigDecimal skuPrice = productFeignClient.getSkuPrice(skuId);
        if(skuPrice != null){
            mapResult.put("price",skuPrice);
        }

        //4.根据spuId查询商品海报列表 spuPosterList
        List<SpuPoster> spuPosterList = productFeignClient.getSpuPosterBySpuId(skuInfo.getSpuId());
        if(spuPosterList != null){
            mapResult.put("spuPosterList",spuPosterList);
        }

        // 5.根据skuId查询平台属性列表 skuAttrList
        List<BaseAttrInfo> attrInfoList = productFeignClient.getAttrList(skuId);
        if(attrInfoList != null){
            mapResult.put("skuAttrList",attrInfoList);
        }

        //6.根据spuID+SkuId查询销售属性 选中当前商品销售属性 spuSaleAttrList
        List<SpuSaleAttr> spuSaleAttrList = productFeignClient.getSpuSaleAttrListCheckBySku(skuId, skuInfo.getSpuId());
        if(spuSaleAttrList != null){
            mapResult.put("spuSaleAttrList",spuSaleAttrList);
        }

        //7.根据spuID查询销售属性跟sku对照关系-选择销售属性组合,切换SKU valuesSkuJson
        Map skuValueIdsMap = productFeignClient.getSkuValueIdsMap(skuInfo.getSpuId());
        if(skuValueIdsMap != null){
            mapResult.put("valuesSkuJson", JSON.toJSONString(skuValueIdsMap));
        }

        //8.远程调用搜索微服务更新商品热度值

            listFeignClient.incrHotScore(skuId);


        //x.等待所有异步任务并行执行完毕,主线程继续执行响应结果
        return mapResult;
    }
}